通常我會使用Postman或curl來測試REST API,不過這兩個工具都需要額外安裝。
我自己有寫一個REST API供Winodws系統排程使用,所以需要用指令來撰寫Script。
在查了一下Powershell的指令集後,發現可以利用Invoke-RestMethod指令來完成。
我的語法如下,要注意的是下列語法是同一行,只是用「`」來分行:
Invoke-RestMethod 'http://192.192.192.10:8587/ords/ords_test/demo04/temp' `
-Method 'GET' `
-Headers @{ "Content-Type" = "application/json"; }
成功傳回資料,但是由上圖可知顯示的格式是已經分析response的json,而且如果資料過長,就會被截斷如下圖
可以加上ConvertTo-Json,顯示JSON的原貌
Invoke-RestMethod 'http://192.192.192.10:8587/ords/ords_test/demo04/temp' `
-Method 'GET' `
-Headers @{ "Content-Type" = "application/json"; } `
| ConvertTo-Json
要request的json如右:{"name"="9527"; "job"="長工"},我的語法如下:
Invoke-RestMethod 'http://192.192.192.10:8587/ords/ords_test/demo02/plsql01' `
-Method 'POST' `
-Headers @{ "Content-Type" = "application/json" } `
-Body ((@{"name"="9527"; "job"="長工"})|ConvertTo-Json)
要注意的是-Body這一行,除了利用管線「|」來轉成json之外,其括弧()也是不可以省略的,也可以用變數的方式來取代
$DATA = @{"name"="9527"; "job"="長工"}
Body的值改為-Body ($DATA|ConvertTo-Json)
此外,因為json上有中文字,所以還需要針對中文來進行編碼(utf-8),以免變成亂碼,所以修正後的語法如下:
Invoke-RestMethod 'http://192.192.192.10:8587/ords/ords_test/demo02/plsql01' `
-Method 'POST' `
-Headers @{ "Content-Type" = "application/json";"charset"="utf-8" } `
-Body ([System.Text.Encoding]::UTF8.GetBytes(((@{"name"="9527"; "job"="長工"})|ConvertTo-Json)))
如果是比較複雜的json,範例如下
{
"site": "test",
"List": [
"A1",
"A2"]
}
可以寫成:
$BODY_DATA = @{
"site" = "test" ;
"List" = @(
"A1",
"A2")
}
這次是用form來request資料,不過因為目前我只有json的REST api,所以就先記錄一下。
檔案的部份用get-item來取得,其語法如下:
$Form = @{
Name = "A001"
photo = Get-Item -Path 'd:\test.png'
}
$Result = Invoke-RestMethod -Uri "http://test.com" -Method Post -Form $Form
利用Windows內建的powershell就可以使用REST API,真的太方便了。
本篇參考我的blog:https://blog.twtnn.com/